#include <iostream>
#include <fstream>
#include "Menu.h"

using namespace std;

Menu::Menu() {
	// Inicializo los tres botones
	vector<Boton*>* unVector = new vector<Boton*>;
	Boton* botonAceptar = new Boton(477, 17, 170, 67);
	unVector->push_back(botonAceptar);
	Boton* botonGuardar = new Boton(842, 17, 170, 67);
	unVector->push_back(botonGuardar);
	Boton* botonSalir = new Boton(1026, 17, 170, 67);
	unVector->push_back(botonSalir);

	this->vectorBotones = unVector;

	CajaTexto* unaCaja = new CajaTexto(0, 0, 0, 0);
	this->cajaTexto = unaCaja;
	fondoSeleccionado = "";
	clickCambiarFondo = false;
	clickGuardarEscenario = false;
	dibujarTilde = false;
	cambiarBotonPlayStop = false;

	// Inicializo los valores del tilde
	xTilde = 795;
	yTilde = 17;
	anchoTilde = 67;
	altoTilde = 67;

	textureFondo = NULL;
	textureTilde = NULL;
	texturePlayStop = NULL;

	xPlayStop = 409;
	yPlayStop = 18;
	anchoPlayStop = 30;
	altoPlayStop = 25;

	pathPlayStop = "img/play.png";
	modoEdicion = true;

}

vector<Boton*>* Menu::getVectorBotones() {
	return this->vectorBotones;
}

CajaTexto* Menu::getCajaTexto() {
	return this->cajaTexto;
}

bool Menu::isModoEdicion() {
	return modoEdicion;
}

void Menu::setModoEdicion(bool modoEdicion) {

	if (modoEdicion == true) {
		pathPlayStop = "img/play.png";
	} else {
		pathPlayStop = "img/stop.png";
	}

	this->modoEdicion = modoEdicion;
}

Menu::~Menu() {
	SDL_DestroyTexture(textureFondo);
	SDL_DestroyTexture(textureTilde);
	SDL_DestroyTexture(texturePlayStop);
}

int Menu::dibujar(SDL_Renderer* renderer, double iDibX, double iDibY,
		double wDib, double hDib) {
	if (textureFondo == NULL) {
		textureFondo = IMG_LoadTexture(renderer, "img/menu.png");
		if (textureFondo == NULL) {
			std::cout << "SDL_CreateTextureFromSurface Error: "
					<< SDL_GetError() << std::endl;
			return 1;
		}
	}
	SDL_Rect sdlRect;
	sdlRect.x = iDibX;
	sdlRect.y = iDibY;
	sdlRect.w = wDib;
	sdlRect.h = hDib;
	SDL_RenderCopy(renderer, textureFondo, NULL, &sdlRect);

	if (dibujarTilde) {
		if (textureTilde == NULL) {
			textureTilde = IMG_LoadTexture(renderer, "img/tilde.png");
		}
		SDL_Rect sdlRect2;
		sdlRect2.x = xTilde;
		sdlRect2.y = yTilde;
		sdlRect2.w = anchoTilde;
		sdlRect2.h = altoTilde;
		SDL_RenderCopy(renderer, textureTilde, NULL, &sdlRect2);
	}
	if (texturePlayStop == NULL || this->cambiarBotonPlayStop==true) {
		texturePlayStop = IMG_LoadTexture(renderer, pathPlayStop.c_str());
		this->cambiarBotonPlayStop = false;
	}

	SDL_Rect sdlRect3;
	sdlRect3.x = xPlayStop;
	sdlRect3.y = yPlayStop;
	sdlRect3.w = anchoPlayStop;
	sdlRect3.h = altoPlayStop;
	SDL_RenderCopy(renderer, texturePlayStop, NULL, &sdlRect3);

	return 0;
}

bool Menu::detectarEventos(SDL_Event evento) {

	clickCambiarFondo = false;
	clickGuardarEscenario = false;

	if (evento.button.type
			== SDL_MOUSEBUTTONDOWN&& evento.button.button == SDL_BUTTON_LEFT) {

		// Clickeo en el boton aceptar
		if ((evento.button.x >= getVectorBotones()->at(0)->getX())
				&& (evento.button.x
						<= getVectorBotones()->at(0)->getX()
								+ getVectorBotones()->at(0)->getAncho())
				&& (evento.button.y >= getVectorBotones()->at(0)->getY())
				&& (evento.button.y
						<= getVectorBotones()->at(0)->getY()
								+ getVectorBotones()->at(0)->getAlto())
				&& isModoEdicion()) {
			cout << "Clickeo en el boton aceptar" << endl;
			clickCambiarFondo = true;
			ifstream archivo(this->cajaTexto->getTexto().c_str());
			if (!archivo) {
				fondoSeleccionado = "img/canvasDefault.png";
			} else {
				fondoSeleccionado = cajaTexto->getTexto();
			}

		}
		// Clickeo en el boton guardar
		else if ((evento.button.x >= getVectorBotones()->at(1)->getX())
				&& (evento.button.x
						<= getVectorBotones()->at(1)->getX()
								+ getVectorBotones()->at(1)->getAncho())
				&& (evento.button.y >= getVectorBotones()->at(1)->getY())
				&& (evento.button.y
						<= getVectorBotones()->at(1)->getY()
								+ getVectorBotones()->at(1)->getAlto())
				&& isModoEdicion()) {
			clickGuardarEscenario = true;

		}
		// Clickeo en el boton Salir
		else if ((evento.button.x >= getVectorBotones()->at(2)->getX())
				&& (evento.button.x
						<= getVectorBotones()->at(2)->getX()
								+ getVectorBotones()->at(2)->getAncho())
				&& (evento.button.y >= getVectorBotones()->at(2)->getY())
				&& (evento.button.y
						<= getVectorBotones()->at(2)->getY()
								+ getVectorBotones()->at(2)->getAlto())) {
			cout << "Clickeo en el boton salir" << endl;
			return true;
		}
		// Clickeo en el boton Play-Stop
		else if ((evento.button.x >= this->xPlayStop)
				&& (evento.button.x <= this->xPlayStop + this->anchoPlayStop)
				&& (evento.button.y >= this->yPlayStop)
				&& (evento.button.y <= this->yPlayStop + this->altoPlayStop)) {
			cout << "Clickeo en el boton Play-Stop" << endl;
			this->setModoEdicion(!modoEdicion);
			this->clickPlayStop = true;
			this->cambiarBotonPlayStop = true;
		}

	}

	if (isModoEdicion()) {
		this->cajaTexto->detectarEventos(evento);
	}

	return false;
}
